﻿/*!
 * @file ConfFileReader.h
 * @brief 設定ファイルを読み込む
 * 
 * 設定ファイルの仕様は
 * 基本的には
 * パラメータ名:値
 * です。行頭に#をつけるとその行はコメントになります。
 * 空行は無視されます。
 *
 * ini ファイルみたいに
 * [グループ名]
 * をつけることで、パラメータをグループ分けすることができます。
 * getParams(グループ名) とすることで、そのグループに属するパラメータの集合を得られます。
 *
 * [グループ名]
 * がない場合、各パラメータは default グループに属します。
 *
 * @author 川西康友
 * @date Last Change:2010/Jan/08 12:07:13.
 * */

#ifndef __CONF_FILE_READER__
#define __CONF_FILE_READER__
#include <string>
#include <set>
#include <map>
//namespace mmpl{}
//namespace skl=mmpl;

namespace mmpl{
	/*!
	 * @class ConfFileReader
	 * @brief 設定ファイルを読み込む
	 * */
	class ConfFileReader{
		public:
			explicit ConfFileReader(const std::map<std::string,std::string>& conf);
			explicit ConfFileReader(const std::string& filename);
			~ConfFileReader();
			std::map<std::string, std::string>::iterator find(const std::string& key);
			std::string& operator[](const std::string& key);
			std::map<std::string,std::string> getParams()const;
			std::map<std::string,std::string> getParams(const std::string& groupname)const;
			std::set<std::string> getGroupNames()const;
			bool hasParam(const std::string& key,const std::string& group="default")const;
		private:
			ConfFileReader();
			std::map<std::string,std::map<std::string,std::string> > params;
	};
}


#endif // __CONF_FILE_READER__


